Widget configurator — Praatbox
`,
react: `// app/layout.tsx
import Script from 'next/script';
`,
npm: `# Install
pnpm add @praatbox/widget
# Import
import { Praatbox } from '@praatbox/widget';
Praatbox.init({ id: 'wgt_glodinas_eu' });`,
shopify: `# Shopify · Online Store → Themes → Edit Code
# theme.liquid — add before
{% include 'praatbox' %}
# In snippets/praatbox.liquid:
`,
};
const handleCopy = () => {
setCopied(true);
setTimeout(()=>setCopied(false), 1400);
};
return (
>}>
Widget · live on praatbox.com
Tweak the look and behavior. Changes preview live; publish when you're ready. Currently serving 4 sites · 184 conversations today.
v 4.2.0 · LIVE
{/* CONTROLS */}
Brand
How the widget looks. Colour, copy, voice.
Accent colour
Header background, send button, focus rings.
{COLORS.map((c) => (
))}
setColor(e.target.value)} style={{width:32,height:32,border:"none",background:"none",cursor:"pointer",borderRadius:8}}/>
Greeting
First line a visitor sees. Keep it short and human.
setGreet(e.target.value)} style={{width:"100%",border:"1px solid var(--line)",borderRadius:9,padding:"10px 12px",fontFamily:"inherit",fontSize:14,color:"var(--ink)",background:"var(--paper)"}}/>
Avatar
Shown in the header next to the name.
P
Position
Where the launcher sits on the page.
{POSITIONS.map((p) => )}
Behaviour
When and how it appears. What it does when you're not around.
{}} />
{}} />
Install snippet
Drop into your site's <body>. Same snippet, four shapes.
{Object.keys(snippets).map((k) => (
))}
]+>)/g, m => `${m}`)
.replace(/(\b(?:const|let|var|import|from|function|return|new|window|document)\b)/g, '$1')
.replace(/('[^']*'|"[^"]*")/g, '$1')
.replace(/(#[^\n]*|\/\/[^\n]*|<!--[^\n]*-->|\{%[^%]*%\})/g, '$1')
}} />
WIDGET ID: wgt_glodinas_eu · LIVE
Installations · 4 sites
Each gets its own snippet, conversations are tagged automatically.
{[
{n:"praatbox.com", e:"Production · all visitors", c:"184 today", st:"is-ok"},
{n:"staging.praatbox.com", e:"Webflow staging · IP-restricted", c:"3 today", st:"is-info"},
{n:"glodinas.com", e:"Customer install · trial", c:"42 today", st:"is-ok"},
{n:"app.modlinhome.com", e:"Customer install · production", c:"61 today", st:"is-ok"},
].map((i) => (
))}
{/* PREVIEW */}
Live preview
praatbox.com/pricing
{/* widget header */}
P
{showName &&
Praatbox · Glodinas}
{greet}
{hours? "Replying in ~1 minute · weekdays 9-5 CET" : "Always on, 24/7"}
{/* messages */}
Hi! Asking about EU pricing — is VAT included for a Serbian company?
For a Serbian PIB, reverse-charge applies — no VAT added at checkout.
{/* suggested */}
SUGGESTED
{["Show me an invoice example","Walk me through upgrade","Talk to a human"].map((s) => (
))}
{/* input */}
Type your message…
{voice &&
}
{/* footer */}
POWERED BY PRAATBOX
{/* launcher dot */}
SIZE 14 KB GZ · INDEPENDENT OF YOUR APP BUNDLE
WCAG 2.1 AA
);
}
ReactDOM.createRoot(document.getElementById("root")).render();